/**
 * Esta clase representa una venta directa en efectivo
 * realizada en una sucursal.
 */
package ventas;

import sucursal.Sucursal;
import clientes.Cliente;
import clientes.ListaDeCompras;
import exceptions.VentaYaAbonadaException;

/**
 * @author Lucas Alan Silvestri.
 *
 */
public abstract class VentaDirecta extends Venta {
	
	private float dineroEnEfectivo;

	/**
	 * Constructor de la clase.
	 * @param unaListaDeCompras es una lista con los productos
	 * que desea comprar el cliente.
	 * @param sucursalDondeSeRealizaLaVenta es la sucursal donde
	 * se realiza la venta.
	 * @param clienteQueDeseaRealizarLaCompra es el cliente
	 * quien quiere realizar la compra de productos.
	 * @param dinero es el dinero que aporta el cliente para pagar
	 * los productos.
	 */
	public VentaDirecta(ListaDeCompras unaListaDeCompras,
			Sucursal sucursalDondeSeRealizaLaVenta,
			Cliente clienteQueDeseaRealizarLaCompra,
			float dinero) {
		super(unaListaDeCompras, sucursalDondeSeRealizaLaVenta,
				clienteQueDeseaRealizarLaCompra);
		this.setDineroEnEfectivo(dinero);
	}
	
	/**
	 * @return si el cliente puede pagar los productos.
	 * @throws VentaYaAbonadaException 
	 */
	protected boolean elClientePuedePagarLosProductos() throws VentaYaAbonadaException{
		return this.getDineroEnEfectivo() >=
				this.montoAPagarPorLosProductos();
	}
	
	/**
	 * cobrara los productos al cliente.
	 * @throws VentaYaAbonadaException 
	 */
	@Override
	protected void cobrarProductos() throws VentaYaAbonadaException {
		this.setDineroEnEfectivo(
				this.getDineroEnEfectivo() - 
				this.montoAPagarPorLosProductos());	
	}
	
	/**
	 * @return el dinero en efectivo con el cual
	 * abonara el cliente.
	 */
	public float getDineroEnEfectivo() {
		return dineroEnEfectivo;
	}

	/**
	 * @param dineroEnEfectivo es el dinero en efectivo con el cual
	 * abonara el cliente.
	 */
	private void setDineroEnEfectivo(float dineroEnEfectivo) {
		this.dineroEnEfectivo = dineroEnEfectivo;
	}
}